package in.model; import in.lib.Debug; import in.lib.manager.CacheManager; import in.lib.manager.UserManager; import in.model.base.NetObject; import java.util.List; import lombok.Getter; import lombok.Setter; import lombok.ToString; import android.os.Parcel; import android.os.Parcelable; import com.esotericsoftware.kryo.serializers.TaggedFieldSerializer.Tag; import com.google.gson.JsonObject; /** * Serializable class for users * @author CallumTaylor */ @ToString(includeFieldNames = true, callSuper = true) public class SimpleUser extends NetObject { @Tag(0x01) @Getter @Setter private String avatarUrl = ""; @Tag(0x02) @Getter @Setter private String coverUrl = ""; @Tag(0x03) @Getter @Setter private String mentionName = ""; @Tag(0x04) @Getter @Setter private String firstName = ""; @Tag(0x05) @Getter @Setter private String lastName = ""; @Tag(0x06) @Getter @Setter private Boolean youFollow = Boolean.FALSE; public String getUserName() { return new StringBuilder().append(firstName).append(" ").append(lastName).toString().trim(); } /** * Parses the return API object into a user class using the specified user * @param user The jsonobject user from the API * @param acc The user to use when parsing * @return The new User object */ @Override public SimpleUser createFrom(JsonObject user) { try { setId(user.get("id").getAsString()); setAvatarUrl(user.get("avatar_image").getAsJsonObject().get("url").getAsString()); setCoverUrl(user.get("cover_image").getAsJsonObject().get("url").getAsString()); if (user.has("name")) { String userName = user.get("name").getAsString(); String[] parts = userName.split("\\s"); setFirstName(parts.length > 0 ? parts[0] : getUserName()); if (parts.length > 1) { for (int index = 1; index < parts.length; index++) { lastName += parts[index] + " "; } setLastName(lastName.substring(0, lastName.length() - 1)); } } else { setFirstName(""); setLastName(""); } setMentionName(user.get("username").getAsString()); if (!isYou()) { setYouFollow(user.has("you_follow") ? user.get("you_follow").getAsBoolean() : false); } return this; } catch (Exception e) { Debug.out(e); return null; } } /** * Gets if the user is you or not * @return True if it is, false if not */ public boolean isYou() { return getId().equals(UserManager.getUserId()); } public static boolean containsUser(List<SimpleUser> list, SimpleUser user) { if (user != null) { for (SimpleUser u : list) { if (u != null && u.getId().equals(user.getId())) { return true; } } } return false; } public static SimpleUser deserialize(byte[] data) { return CacheManager.getInstance().deserialize(data, SimpleUser.class); } public static SimpleUser parseFromUser(User user) { if (user != null) { SimpleUser u = new SimpleUser(); u.setAvatarUrl(user.getAvatarUrl()); u.setCoverUrl(user.getCoverUrl()); u.setFilterTag(user.getFilterTag()); u.setFirstName(user.getFirstName()); u.setId(user.getId()); u.setLastName(user.getLastName()); u.setMentionName(user.getMentionName()); u.setYouFollow(user.getYouFollow()); return u; } return null; } @Override public SimpleUser createFrom(Parcel object) { setAvatarUrl(object.readString()); setCoverUrl(object.readString()); setMentionName(object.readString()); setFirstName(object.readString()); setLastName(object.readString()); setYouFollow((Boolean)object.readValue(null)); super.createFrom(object); return this; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(getAvatarUrl()); dest.writeString(getCoverUrl()); dest.writeString(getMentionName()); dest.writeString(getFirstName()); dest.writeString(getLastName()); dest.writeValue(getYouFollow()); super.writeToParcel(dest, flags); } public static final Parcelable.Creator<SimpleUser> CREATOR = new Creator<SimpleUser>() { @Override public SimpleUser[] newArray(int size) { return new SimpleUser[size]; } @Override public SimpleUser createFromParcel(Parcel source) { return new SimpleUser().createFrom(source); } }; }